interface _CU_ {
    /**
     * 判断对象是否为指定类型
     * @param type 类型
     * @param obj 对象
     * @param detail <false> false: 只判断类型;
     * @returns true: 是指定类型; false: 不是指定类型;
     */
    is(type: string | Array<string>, obj: any, detail?: false): boolean;
    /**
     * 判断对象是否为指定类型
     * @param type 类型
     * @param obj 对象
     * @param detail <false> true: 判断类型 或 详细类型;
     * @returns true: 是指定类型; false: 不是指定类型;
     */
    is(type: string | Array<string>, obj: any, detail: true): boolean;
}
{
    const fnd = (type: string | Array<string>, obj: any) => {
        const t = U.typeof(obj, true);
        if (Array.isArray(type)) {
            for (let i = 0; i < type.length; i++) {
                const ti = type[i];
                if (t.type === ti || t.detail === ti) { return true; }
            }
            return false;
        }
        return t.type === type || t.detail === type;
    };
    const fn = (type: string | Array<string>, obj: any) => {
        const t = U.typeof(obj, false);
        if (Array.isArray(type)) {
            for (let i = 0; i < type.length; i++) {
                const ti = type[i];
                if (t == ti) { return true; }
            }
            return false;
        }
        return t == type;
    };

    Object.defineProperty(_CU_.prototype, 'is', {
        writable: false,
        configurable: false,
        enumerable: false,
        value: (type: string | Array<string>, obj: any, detail: boolean = false) => {
            return detail ? fnd(type, obj) : fn(type, obj);
        }
    });
}
